]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shell: Remove ContactSystem
authorFlorian Müllner <fmuellner@gnome.org>
Mon, 11 Jun 2012 13:18:17 +0000 (15:18 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 29 Jun 2012 09:21:50 +0000 (11:21 +0200)
Remove the now unused ShellContactSystem. As a side effect, we no
longer depend on folks now.

https://bugzilla.gnome.org/show_bug.cgi?id=677442

configure.ac
js/Makefile.am
js/misc/config.js.in
src/Makefile.am
src/shell-contact-system.c [deleted file]
src/shell-contact-system.h [deleted file]

index cea22db0d975d54c709996b1fb8362ce69b610af..d5875f9d9ff4d2f4937723869bf599a69b4b2a65 100644 (file)
@@ -64,7 +64,6 @@ CLUTTER_MIN_VERSION=1.9.16
 GOBJECT_INTROSPECTION_MIN_VERSION=0.10.1
 GJS_MIN_VERSION=1.33.2
 MUTTER_MIN_VERSION=3.5.3
-FOLKS_MIN_VERSION=0.5.2
 GTK_MIN_VERSION=3.3.9
 GIO_MIN_VERSION=2.31.6
 LIBECAL_MIN_VERSION=3.5.3
@@ -78,27 +77,11 @@ GCR_MIN_VERSION=3.3.90
 GNOME_DESKTOP_REQUIRED_VERSION=3.5.1
 GNOME_MENUS_REQUIRED_VERSION=3.5.3
 
-AC_ARG_WITH(folks,
-            AS_HELP_STRING([--with-folks],
-                           [Enable folks support]),
-            [with_folks=$withval], [with_folks=yes])
-
-if test x${with_folks} = xyes; then
-  FOLKS_REQUIREMENT="folks >= $FOLKS_MIN_VERSION"
-  AC_DEFINE([HAVE_FOLKS], [1], [folks support])
-  AC_SUBST([HAVE_FOLKS],[1])
-else
-  FOLKS_REQUIREMENT=
-  AC_SUBST([HAVE_FOLKS],[0])
-fi
-AM_CONDITIONAL(BUILD_WITH_FOLKS, test x${with_folks} = xyes)
-
 # Collect more than 20 libraries for a prize!
 PKG_CHECK_MODULES(GNOME_SHELL, gio-unix-2.0 >= $GIO_MIN_VERSION
                               libxml-2.0
                                gtk+-3.0 >= $GTK_MIN_VERSION
                                atk-bridge-2.0
-                              $FOLKS_REQUIREMENT
                                libmutter >= $MUTTER_MIN_VERSION
                                gjs-internals-1.0 >= $GJS_MIN_VERSION
                               libgnome-menu-3.0 >= $GNOME_MENUS_REQUIRED_VERSION
index 0b98cbdc6c1308c033fcb68211b7e921cb035539..a3a730176c240aa90395ee8d68a45ea523111ee4 100644 (file)
@@ -6,7 +6,6 @@ misc/config.js: misc/config.js.in Makefile
        [ -d $(@D) ] || $(mkdir_p) $(@D) ; \
        sed -e "s|[@]PACKAGE_NAME@|$(PACKAGE_NAME)|g" \
            -e "s|[@]PACKAGE_VERSION@|$(PACKAGE_VERSION)|g" \
-           -e "s|[@]HAVE_FOLKS@|$(HAVE_FOLKS)|g" \
            -e "s|[@]HAVE_BLUETOOTH@|$(HAVE_BLUETOOTH)|g" \
            -e "s|[@]GETTEXT_PACKAGE@|$(GETTEXT_PACKAGE)|g" \
            -e "s|[@]datadir@|$(datadir)|g" \
index 33a7a54cda36925ab70436a191ccd317eb6ecc41..9769104c41ca77a3b43cdd580c7cc9dc2b538fd4 100644 (file)
@@ -6,8 +6,6 @@ const PACKAGE_NAME = '@PACKAGE_NAME@';
 const PACKAGE_VERSION = '@PACKAGE_VERSION@';
 /* 1 if gnome-bluetooth is available, 0 otherwise */
 const HAVE_BLUETOOTH = @HAVE_BLUETOOTH@;
-/* 1 if folks is available, 0 otherwise */
-const HAVE_FOLKS = @HAVE_FOLKS@;
 /* gettext package */
 const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
 /* locale dir */
index a585cf8c0de81bca1c0f476e70c76c04efe5332c..99251af82843fa42027b1815ef3e7addd01fe1a8 100644 (file)
@@ -131,10 +131,6 @@ shell_public_headers_h =           \
        shell-wm.h                      \
        shell-xfixes-cursor.h
 
-if BUILD_WITH_FOLKS
-shell_public_headers_h += shell-contact-system.h
-endif
-
 shell_private_sources = \
        gactionmuxer.h                  \
        gactionmuxer.c                  \
@@ -187,10 +183,6 @@ libgnome_shell_la_SOURCES =                \
        shell-xfixes-cursor.c           \
        $(NULL)
 
-if BUILD_WITH_FOLKS
-libgnome_shell_la_SOURCES += shell-contact-system.c
-endif
-
 libgnome_shell_la_gir_sources = \
        $(filter-out %-private.h $(shell_private_sources), $(shell_public_headers_h) $(libgnome_shell_la_SOURCES))
 
@@ -307,9 +299,6 @@ libgnome_shell_la_CPPFLAGS = $(gnome_shell_cflags)
 
 Shell-0.1.gir: libgnome-shell.la St-1.0.gir
 Shell_0_1_gir_INCLUDES = Clutter-1.0 ClutterX11-1.0 Meta-3.0 TelepathyGLib-0.12 TelepathyLogger-0.2 Soup-2.4 GMenu-3.0 NetworkManager-1.0 NMClient-1.0
-if BUILD_WITH_FOLKS
-Shell_0_1_gir_INCLUDES += Folks-0.6
-endif
 Shell_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
 Shell_0_1_gir_LIBS = libgnome-shell.la
 Shell_0_1_gir_FILES = $(libgnome_shell_la_gir_sources)
diff --git a/src/shell-contact-system.c b/src/shell-contact-system.c
deleted file mode 100644 (file)
index 8f00021..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-/* This implements a complete suite for caching and searching contacts in the
- * Shell. We retrieve contacts from libfolks asynchronously and we search
- * these for display to the user. */
-
-#include "shell-contact-system.h"
-
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <gee.h>
-#include <clutter/clutter.h>
-#include <folks/folks.h>
-
-#include "shell-global.h"
-#include "shell-util.h"
-#include "st.h"
-
-G_DEFINE_TYPE (ShellContactSystem, shell_contact_system, G_TYPE_OBJECT);
-
-#define NAME_PREFIX_MATCH_WEIGHT 100
-#define NAME_SUBSTRING_MATCH_WEIGHT 90
-#define ADDR_PREFIX_MATCH_WEIGHT 10
-#define ADDR_SUBSTRING_MATCH_WEIGHT 5
-
-
-/* Callbacks */
-
-static void
-prepare_individual_aggregator_cb (GObject       *obj,
-                                  GAsyncResult  *res,
-                                  gpointer      user_data)
-{
-  FolksIndividualAggregator *aggregator = FOLKS_INDIVIDUAL_AGGREGATOR (obj);
-
-  folks_individual_aggregator_prepare_finish (aggregator, res, NULL);
-}
-
-
-/* Internal stuff */
-
-typedef struct {
-    gchar *key;
-    guint weight;
-} ContactSearchResult;
-
-struct _ShellContactSystemPrivate {
-    FolksIndividualAggregator *aggregator;
-};
-
-static void
-shell_contact_system_constructed (GObject *obj)
-{
-  ShellContactSystem *self = SHELL_CONTACT_SYSTEM (obj);
-
-  G_OBJECT_CLASS (shell_contact_system_parent_class)->constructed (obj);
-
-  /* We intentionally do not care about the "individuals-changed" signal, as
-   * we don't intend to update searches after they've been performed.
-   * Therefore, we will simply retrieve the "individuals" property which
-   * represents a snapshot of the individuals in the aggregator.
-   */
-  self->priv->aggregator = folks_individual_aggregator_new ();
-  folks_individual_aggregator_prepare (self->priv->aggregator, prepare_individual_aggregator_cb, NULL);
-}
-
-static void
-shell_contact_system_finalize (GObject *obj)
-{
-  ShellContactSystem *self = SHELL_CONTACT_SYSTEM (obj);
-
-  g_object_unref (self->priv->aggregator);
-
-  G_OBJECT_CLASS (shell_contact_system_parent_class)->finalize (obj);
-}
-
-static void
-shell_contact_system_init (ShellContactSystem *self)
-{
-  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, SHELL_TYPE_CONTACT_SYSTEM, ShellContactSystemPrivate);
-}
-
-static void
-shell_contact_system_class_init (ShellContactSystemClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  object_class->constructed = shell_contact_system_constructed;
-  object_class->finalize = shell_contact_system_finalize;
-
-  g_type_class_add_private (object_class, sizeof (ShellContactSystemPrivate));
-}
-
-/*
- * normalize_terms:
- * @terms: (element-type utf8): Input search terms
- *
- * Returns: (element-type utf8) (transfer full): Unicode-normalized and lowercased terms
- */
-static GSList *
-normalize_terms (GSList *terms)
-{
-  GSList *normalized_terms = NULL;
-  GSList *iter;
-  for (iter = terms; iter; iter = iter->next)
-    {
-      const char *term = iter->data;
-      normalized_terms = g_slist_prepend (normalized_terms, shell_util_normalize_and_casefold (term));
-    }
-  return normalized_terms;
-}
-
-static guint
-do_match (ShellContactSystem  *self,
-          FolksIndividual     *individual,
-          GSList              *terms)
-{
-  GSList *term_iter;
-  guint weight = 0;
-
-  char *alias = shell_util_normalize_and_casefold (folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-  char *name = shell_util_normalize_and_casefold (folks_name_details_get_full_name (FOLKS_NAME_DETAILS (individual)));
-  char *nick = shell_util_normalize_and_casefold (folks_name_details_get_nickname (FOLKS_NAME_DETAILS (individual)));
-
-  GeeMultiMap *im_addr_map = folks_im_details_get_im_addresses (FOLKS_IM_DETAILS (individual));
-  GeeCollection *im_addrs = gee_multi_map_get_values (im_addr_map);
-  GeeSet *email_addrs = folks_email_details_get_email_addresses (FOLKS_EMAIL_DETAILS (individual));
-  GeeIterator *addrs_iter;
-
-  gboolean have_name_prefix = FALSE;
-  gboolean have_name_substring = FALSE;
-  
-  gboolean have_addr_prefix = FALSE;
-  gboolean have_addr_substring = FALSE;
-
-  for (term_iter = terms; term_iter; term_iter = term_iter->next)
-    {
-      const char *term = term_iter->data;
-      const char *p;
-      gboolean matched;
-
-      matched = FALSE;
-
-      /* Match on alias, name, nickname */
-      if (alias != NULL)
-       {
-         p = strstr (alias, term);
-         if (p == alias)
-            {
-             have_name_prefix = TRUE;
-              matched = TRUE;
-            }
-         else if (p != NULL)
-            {
-             have_name_substring = TRUE;
-              matched = TRUE;
-            }
-       }
-      if (name != NULL)
-       {
-         p = strstr (name, term);
-         if (p == name)
-            {
-             have_name_prefix = TRUE;
-              matched = TRUE;
-            }
-         else if (p != NULL)
-            {
-             have_name_substring = TRUE;
-              matched = TRUE;
-            }
-       }
-      if (nick != NULL)
-       {
-         p = strstr (nick, term);
-         if (p == nick)
-            {
-             have_name_prefix = TRUE;
-              matched = TRUE;
-            }
-         else if (p != NULL)
-            {
-             have_name_substring = TRUE;
-              matched = TRUE;
-            }
-       }
-
-      /* Match on one or more IM or email addresses */
-      addrs_iter = gee_iterable_iterator (GEE_ITERABLE (im_addrs));
-
-      while (gee_iterator_next (addrs_iter))
-        {
-          FolksImFieldDetails *field = gee_iterator_get (addrs_iter);
-          const gchar *addr = folks_abstract_field_details_get_value ((FolksAbstractFieldDetails*)field);
-
-          p = strstr (addr, term);
-          if (p == addr)
-            {
-              have_addr_prefix = TRUE;
-              matched = TRUE;
-            }
-          else if (p != NULL)
-            {
-              have_addr_substring = TRUE;
-              matched = TRUE;
-            }
-
-          g_object_unref (field);
-        }
-
-      g_object_unref (addrs_iter);
-      addrs_iter = gee_iterable_iterator (GEE_ITERABLE (email_addrs));
-      while (gee_iterator_next (addrs_iter))
-        {
-          FolksEmailFieldDetails *field = gee_iterator_get (addrs_iter);
-          const gchar *addr = folks_abstract_field_details_get_value ((FolksAbstractFieldDetails*)field);
-
-          p = strstr (addr, term);
-          if (p == addr)
-            {
-              have_addr_prefix = TRUE;
-              matched = TRUE;
-            }
-          else if (p != NULL)
-            {
-              have_addr_substring = TRUE;
-              matched = TRUE;
-            }
-
-          g_object_unref (field);
-        }
-
-      g_object_unref (addrs_iter);
-
-      if (!matched)
-        {
-          have_name_prefix = FALSE;
-          have_name_substring = FALSE;
-          have_addr_prefix = FALSE;
-          have_addr_substring = FALSE;
-          break;
-        }
-    }
-
-    if (have_name_prefix)
-      weight += NAME_PREFIX_MATCH_WEIGHT;
-    else if (have_name_substring)
-      weight += NAME_SUBSTRING_MATCH_WEIGHT;
-
-    if (have_addr_prefix)
-      weight += ADDR_PREFIX_MATCH_WEIGHT;
-    else if (have_addr_substring)
-      weight += ADDR_SUBSTRING_MATCH_WEIGHT;
-
-  g_free (alias);
-  g_free (name);
-  g_free (nick);
-  g_object_unref (im_addrs);
-
-  return weight;
-}
-
-static gint
-compare_results (gconstpointer a,
-                 gconstpointer b)
-{
-  ContactSearchResult *first = (ContactSearchResult *) a;
-  ContactSearchResult *second = (ContactSearchResult *) b;
-
-  if (first->weight > second->weight)
-      return 1;
-  else if (first->weight < second->weight)
-      return -1;
-  else
-      return 0;
-}
-
-static void
-free_result (gpointer data,
-             gpointer user_data)
-{
-  g_slice_free (ContactSearchResult, data);
-}
-
-/* modifies and frees @results */
-static GSList *
-sort_and_prepare_results (GSList *results)
-{
-  GSList *iter;
-  GSList *sorted_results = NULL;
-
-  results = g_slist_sort (results, compare_results);
-
-  for (iter = results; iter; iter = iter->next)
-    {
-      ContactSearchResult *result = iter->data;
-      gchar *id = result->key;
-      sorted_results = g_slist_prepend (sorted_results, id);
-    }
-
-  g_slist_free_full (results, (GDestroyNotify) free_result);
-
-  return sorted_results;
-}
-
-
-/* Methods */
-
-/**
- * shell_contact_system_get_default:
- *
- * Return Value: (transfer none): The global #ShellContactSystem singleton
- */
-ShellContactSystem *
-shell_contact_system_get_default (void)
-{
-  static ShellContactSystem *instance = NULL;
-
-  if (instance == NULL)
-    instance = g_object_new (SHELL_TYPE_CONTACT_SYSTEM, NULL);
-
-  return instance;
-}
-
-/**
- * shell_contact_system_get_all:
- * @self: A #ShellContactSystem
- *
- * Returns: (transfer none): All individuals
- */
-GeeMap *
-shell_contact_system_get_all (ShellContactSystem *self)
-{
-  GeeMap *individuals;
-
-  g_return_val_if_fail (SHELL_IS_CONTACT_SYSTEM (self), NULL);
-
-  individuals = folks_individual_aggregator_get_individuals (self->priv->aggregator);
-
-  return individuals;
-}
-
-/**
- * shell_contact_system_get_individual:
- * @self: A #ShellContactSystem
- * @id: A #gchar with the ID of the FolksIndividual to be returned.
- *
- * Returns: (transfer full): A #FolksIndividual or NULL if @id could not be found.
- */
-FolksIndividual *
-shell_contact_system_get_individual (ShellContactSystem *self,
-                                     gchar              *id)
-{
-  GeeMap *individuals;
-  gpointer key, value;
-
-  key = (gpointer) id;
-
-  g_return_val_if_fail (SHELL_IS_CONTACT_SYSTEM (self), NULL);
-
-  individuals = folks_individual_aggregator_get_individuals (self->priv->aggregator);
-
-  value = gee_map_get (individuals, key);
-
-  return FOLKS_INDIVIDUAL (value);
-}
-
-/**
- * shell_contact_system_get_email_for_display:
- * @self: A #ShellContactSystem
- * @individual A #FolksIndividual
- *
- * Get an email address (either from IM addresses or email), which can be
- * used to represent @individual.
- *
- * Return: (transfer full): a newly allocated string or %NULL if no address
- *                          was found
- */
-char *
-shell_contact_system_get_email_for_display (ShellContactSystem *self,
-                                            FolksIndividual    *individual)
-{
-  GeeMultiMap *im_addr_map = folks_im_details_get_im_addresses (FOLKS_IM_DETAILS (individual));
-  GeeCollection *im_addrs = gee_multi_map_get_values (im_addr_map);
-  GeeSet *email_addrs = folks_email_details_get_email_addresses (FOLKS_EMAIL_DETAILS (individual));
-  GeeIterator *addrs_iter;
-  char *email = NULL;
-
-  addrs_iter = gee_iterable_iterator (GEE_ITERABLE (im_addrs));
-  if (gee_iterator_first (addrs_iter))
-    {
-      FolksImFieldDetails *field = gee_iterator_get (addrs_iter);
-      email = g_strdup (folks_abstract_field_details_get_value ((FolksAbstractFieldDetails*)field));
-
-      g_object_unref (field);
-    }
-
-  g_object_unref (addrs_iter);
-  g_object_unref (im_addrs);
-
-  if (email != NULL)
-    return email;
-
-  addrs_iter = gee_iterable_iterator (GEE_ITERABLE (email_addrs));
-
-  if (gee_iterator_first (addrs_iter))
-    {
-      FolksEmailFieldDetails *field = gee_iterator_get (addrs_iter);
-      email = g_strdup (folks_abstract_field_details_get_value ((FolksAbstractFieldDetails*)field));
-
-      g_object_unref (field);
-    }
-
-  g_object_unref (addrs_iter);
-
-  return email;
-}
-
-/**
- * shell_contact_system_initial_search:
- * @shell: A #ShellContactSystem
- * @terms: (element-type utf8): List of terms, logical AND
- *
- * Search through contacts for the given search terms.
- *
- * Returns: (transfer container) (element-type utf8): List of contact
- * identifiers
- */
-GSList *
-shell_contact_system_initial_search (ShellContactSystem *self,
-                                     GSList             *terms)
-{
-  FolksIndividual *individual;
-  GSList *results = NULL;
-  GeeMap *individuals = NULL;
-  ContactSearchResult *result;
-  GeeMapIterator *iter;
-  gpointer key;
-  guint weight;
-  GSList *normalized_terms = normalize_terms (terms);
-
-  g_return_val_if_fail (SHELL_IS_CONTACT_SYSTEM (self), NULL);
-
-  individuals = folks_individual_aggregator_get_individuals (self->priv->aggregator);
-
-  iter = gee_map_map_iterator (individuals);
-
-  while (gee_map_iterator_next (iter))
-    {
-      individual = gee_map_iterator_get_value (iter);
-      weight = do_match (self, individual, normalized_terms);
-
-      if (weight != 0)
-        {
-          key = gee_map_iterator_get_key (iter);
-
-          result = g_slice_new (ContactSearchResult);
-          result->key = (gchar *) key;
-          result->weight = weight;
-
-          results = g_slist_append (results, result);
-        }
-
-      g_object_unref (individual);
-    }
-
-  g_object_unref (iter);
-  g_slist_free_full (normalized_terms, (GDestroyNotify) g_free);
-
-  return sort_and_prepare_results (results);
-}
-
-/**
- * shell_contact_system_subsearch:
- * @shell: A #ShellContactSystem
- * @previous_results: (element-type utf8): List of previous results
- * @terms: (element-type utf8): List of terms, logical AND
- *
- * Search through a previous result set; for more information see
- * js/ui/search.js.
- *
- * Returns: (transfer container) (element-type utf8): List of contact
- * identifiers
- */
-GSList *
-shell_contact_system_subsearch (ShellContactSystem  *self,
-                                GSList              *previous_results,
-                                GSList              *terms)
-{
-  return shell_contact_system_initial_search (self, terms);
-}
diff --git a/src/shell-contact-system.h b/src/shell-contact-system.h
deleted file mode 100644 (file)
index bf87426..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-#ifndef __SHELL_CONTACT_SYSTEM_H__
-#define __SHELL_CONTACT_SYSTEM_H__
-
-#include <clutter/clutter.h>
-#include <gio/gio.h>
-#include <folks/folks.h>
-
-#define SHELL_TYPE_CONTACT_SYSTEM             (shell_contact_system_get_type ())
-#define SHELL_CONTACT_SYSTEM(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), SHELL_TYPE_CONTACT_SYSTEM, ShellContactSystem))
-#define SHELL_CONTACT_SYSTEM_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), SHELL_TYPE_CONTACT_SYSTEM, ShellContactSystemClass))
-#define SHELL_IS_CONTACT_SYSTEM(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SHELL_TYPE_CONTACT_SYSTEM))
-#define SHELL_IS_CONTACT_SYSTEM_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), SHELL_TYPE_CONTACT_SYSTEM))
-#define SHELL_CONTACT_SYSTEM_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), SHELL_TYPE_CONTACT_SYSTEM, ShellContactSystemClass))
-
-typedef struct _ShellContactSystem ShellContactSystem;
-typedef struct _ShellContactSystemClass ShellContactSystemClass;
-typedef struct _ShellContactSystemPrivate ShellContactSystemPrivate;
-
-struct _ShellContactSystem
-{
-  GObject parent;
-
-  ShellContactSystemPrivate *priv;
-};
-
-struct _ShellContactSystemClass
-{
-  GObjectClass parent_class;
-};
-
-GType shell_contact_system_get_type (void) G_GNUC_CONST;
-
-/* Methods */
-
-ShellContactSystem * shell_contact_system_get_default (void);
-
-GeeMap *shell_contact_system_get_all (ShellContactSystem *self);
-
-FolksIndividual *shell_contact_system_get_individual (ShellContactSystem  *self,
-                                                      gchar               *id);
-
-char * shell_contact_system_get_email_for_display (ShellContactSystem *self,
-                                                   FolksIndividual    *individual);
-
-GSList * shell_contact_system_initial_search (ShellContactSystem  *shell,
-                                              GSList              *terms);
-
-GSList * shell_contact_system_subsearch (ShellContactSystem *shell,
-                                         GSList             *previous_results,
-                                         GSList             *terms);
-
-#endif /* __SHELL_CONTACT_SYSTEM_H__ */